/**
 * \file: produit.h
 * \author:Kacouchia and Diop
 *Interface de declaration d'un type de donnees Produit  
 *Definiton de fonctions et procedures destinees a manipuler des  
 *donnees de ce type  
 */
#ifndef _PRODUIT_H 
#define _PRODUIT_H  
#include "categorie.h" 
#include "typesprimitifs.h"

typedef struct produit {
    CHAINE nom;
    DOUBLE prix_u;
    CATEGORIE categorie;
    ENTIER_POSITIF quantite_disponible;
    ENTIER_POSITIF ID;
} PRODUIT, *POINTEUR_PRODUIT;

typedef struct liste_produit {
    POINTEUR_PRODUIT pproduit;
    struct liste_produit *suivant;
} LISTE_PRODUIT, *POINTEUR_LISTE_PRODUIT;

extern POINTEUR_PRODUIT creer_produit(CHAINE nom,
        ENTIER_POSITIF quantite_dispo,
        DOUBLE prix_un,
        CATEGORIE categorie);

/**
 * Retourne le pointeur sur un produit dont l'identifiant a ete passe en
 * parametre. Retourne null si lp est null ou le produit n'est pas trouve.
 */
extern POINTEUR_PRODUIT chercher_produit(POINTEUR_LISTE_PRODUIT lp,
                                         ENTIER_POSITIF id);

extern void afficher_produit(POINTEUR_PRODUIT pp);
/**  
 * Retourne vrai si la modification s'est bien deroulee.
 */
extern BOOLEEN augmenter_quantite_disponible(ENTIER_POSITIF quantite,
        POINTEUR_PRODUIT pp);
/**  
 * Retourne vrai si la modification s'est bien deroulee.
 */
extern BOOLEEN reduire_quantite_disponible(ENTIER_POSITIF quantite,
        POINTEUR_PRODUIT pp);
/** 
 * Retourne vrai si la modification s'est bien deroulee.
 */
extern BOOLEEN changer_prix_unitaire(DOUBLE prix_un, POINTEUR_PRODUIT pp);

extern void liberer_produit(POINTEUR_PRODUIT pp);

#endif /* _PRODUIT_H */ 
